/**
 * @file led.c
 * @author liqiang (liqiang@hacint.com.cn)
 * @brief 
 * @version 1.0.0
 * @date 2023-08-15
 * 
 * 
 */

#include "led.h"

/*测试*/
 
#include "unity.h"









void	LED1_ON(void)	;
void	LED1_OFF(void)	;
void	BUZZER_ON(void)	;
void	BUZZER_OFF(void)	;



LED_Type		led1;
BUZZER_Type		buzzer;


 

void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_Initure; 

	GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;   
	GPIO_Initure.Pull=GPIO_PULLUP;           
	GPIO_Initure.Speed=GPIO_SPEED_HIGH;      

	LED1_RCC_ENABLE(); 
	GPIO_Initure.Pin=LED1_PIN ;  
	HAL_GPIO_Init(LED1_PORT,&GPIO_Initure);	

	HAL_GPIO_WritePin(LED1_PORT,LED1_PIN,GPIO_PIN_SET);

}

 
void BUZZER_Init(void)
{
	GPIO_InitTypeDef GPIO_Initure; 

		
	GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;   
	GPIO_Initure.Pull=GPIO_PULLUP;           
	GPIO_Initure.Speed=GPIO_SPEED_HIGH;      

	BUZZER_RCC_ENABLE();  
	GPIO_Initure.Pin=BUZZER_PIN;	
	HAL_GPIO_Init(BUZZER_PORT,&GPIO_Initure);	 

	HAL_GPIO_WritePin(BUZZER_PORT,BUZZER_PIN,GPIO_PIN_RESET);
}


void	Plat_LED_Init(void){
		
		LED_Init(); 
}

void	Plat_BUZZER_Init(void){

		BUZZER_Init();
}

void	LED1_ON(void){
 		LED1=led1.data ;
}
 void	Plat_LED1_ON(void){
		if(led1.mode==1){ 
			led1.data = 1; 
		}else  
		{
			led1.data = 0; 
		}
		led1.status	=	1;  
		LED1_ON();
}

void	LED1_OFF(void){
 		LED1=led1.data ;
}

void	Plat_LED1_OFF(void){ 
		if(led1.mode==1){ 
			led1.data = 0; 
		}else  
		{
			led1.data = 1; 
		}
		led1.status	=	0;  
		LED1_OFF();
}
u8		Get_LED1_Status(void){

		return	led1.status;
}

u8		Plat_Get_LED1_Status(void){

		return	Get_LED1_Status();
}

void	BUZZER_ON(void){
		BUZZER=buzzer.data ; 
}
void	Plat_BUZZER_ON(void){
		if(buzzer.mode==1){ 
			buzzer.data = 1; 
		}else  
		{
			buzzer.data = 0; 
		}
		buzzer.status	=	1; 

		BUZZER_ON();
}

void	BUZZER_OFF(void){
		BUZZER=buzzer.data ; 
}
void	Plat_BUZZER_OFF(void){

		if(buzzer.mode==1){ 
			buzzer.data = 0; 
		}else  
		{
			buzzer.data = 1; 
		}
		buzzer.status	=	0; 

		BUZZER_OFF();
}
u8		Get_BUZZER_Status(void){

		return	buzzer.status;
}

u8		Plat_Get_BUZZER_Status(void){

		return	Get_BUZZER_Status();
}

void  	Led_Toggle(void){
		LED1=~LED1	;
}
void  	Plat_Led_Toggle(void){
		Led_Toggle();	
}
 


/**
 * @brief 以下时mock测试
 * 
 */

void	Test_LED_Logic(void){
		/*测试正向逻辑  高电平 ON*/
		led1.mode=1; 
		Plat_LED1_ON(); 
		TEST_ASSERT_EQUAL_HEX8(1,led1.data);
		TEST_ASSERT_EQUAL_HEX8(1,led1.status);	
		TEST_ASSERT_EQUAL_HEX8(1,Plat_Get_LED1_Status());		
		Plat_LED1_OFF();
		TEST_ASSERT_EQUAL_HEX8(0,led1.data); 
		TEST_ASSERT_EQUAL_HEX8(0,led1.status);	
		TEST_ASSERT_EQUAL_HEX8(0,Plat_Get_LED1_Status());	

		/*测试反向逻辑  高电平 OFF*/
		led1.mode=0; 
		Plat_LED1_ON(); 
		TEST_ASSERT_EQUAL_HEX8(0,led1.data);
		TEST_ASSERT_EQUAL_HEX8(1,led1.status);
		TEST_ASSERT_EQUAL_HEX8(1,Plat_Get_LED1_Status());	
		Plat_LED1_OFF();
		TEST_ASSERT_EQUAL_HEX8(1,led1.data);
		TEST_ASSERT_EQUAL_HEX8(0,led1.status);	
		TEST_ASSERT_EQUAL_HEX8(0,Plat_Get_LED1_Status());		
}

void	Test_BUZZER_Logic(void){
		/*测试反向逻辑  高电平 OFF*/		
		buzzer.mode=0;
		Plat_BUZZER_ON();
		TEST_ASSERT_EQUAL_HEX8(0,buzzer.data);
		TEST_ASSERT_EQUAL_HEX8(1,buzzer.status);
		TEST_ASSERT_EQUAL_HEX8(1,Plat_Get_BUZZER_Status());
		Plat_BUZZER_OFF();
		TEST_ASSERT_EQUAL_HEX8(1,buzzer.data);
		TEST_ASSERT_EQUAL_HEX8(0,buzzer.status);
		TEST_ASSERT_EQUAL_HEX8(0,Plat_Get_BUZZER_Status());

		/*测试正向逻辑  高电平 ON*/	
		buzzer.mode=1;
		Plat_BUZZER_ON();
		TEST_ASSERT_EQUAL_HEX8(1,buzzer.data);
		TEST_ASSERT_EQUAL_HEX8(1,buzzer.status);
		TEST_ASSERT_EQUAL_HEX8(1,Plat_Get_BUZZER_Status());
		Plat_BUZZER_OFF();
		TEST_ASSERT_EQUAL_HEX8(0,buzzer.data);
		TEST_ASSERT_EQUAL_HEX8(0,buzzer.status);	
		TEST_ASSERT_EQUAL_HEX8(0,Plat_Get_BUZZER_Status());	
}


void UnitTestO_LED_BUZZER(void){

 
    UNITY_BEGIN(); 
    RUN_TEST(Test_LED_Logic);
    RUN_TEST(Test_BUZZER_Logic);	
 
    UNITY_END();
}
 